package com.delio.server.pagos.pagosueldos;

import java.sql.SQLException;
import java.util.Date;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

import com.delio.client.pagos.pagosueldos.PagoSueldo;
import com.delio.server.base.Conexion;
import com.delio.server.base.util.GxtGridPaginate;
import com.extjs.gxt.ui.client.data.BasePagingLoadResult;
import com.extjs.gxt.ui.client.data.PagingLoadResult;
import com.ibatis.sqlmap.client.SqlMapClient;

public class PagoSueldos {
	private static SqlMapClient sqlMap = null;
	private static Integer aux_estadopago_id;

	@SuppressWarnings("unchecked")
	public static PagingLoadResult<PagoSueldo> getPaginate(GxtGridPaginate paginate, String filter, Integer tipocontrato_id,Integer estadopago_id,Date fecha,Boolean valor) {

		sqlMap = Conexion.getSqlMap();
		String condicion = "";
		paginate.setLimit();
		String xml ="";
		Integer cont = 0;
		aux_estadopago_id=estadopago_id;
        
		if (paginate.order.equals(""))
			paginate.order = " order by id desc";


		if(!valor && estadopago_id>1 ){
			setHistorialPagos(fecha,estadopago_id);
			cont = count2(paginate);
			xml = "paginatePagoSueldoHistorial";
		} 
		else {
			cont = count(paginate);
			xml = "paginatePagoSueldo";
		   }
		

		
		if (tipocontrato_id != null) {
			condicion = " and tipocontrato_id=" + tipocontrato_id;
			if (filter != null)
				condicion += " and empleado ILIKE '%" + filter + "%'";
            
			paginate.condition = condicion;
		}else{
			if (filter != null)
				condicion = " and empleado ILIKE '%" + filter + "%'";
			 paginate.condition = condicion;
		}

		
		List<PagoSueldo> data = null;
		try {
           
			data = sqlMap.queryForList(xml, paginate);

		} catch (SQLException e) {
			e.printStackTrace();

		}
		return new BasePagingLoadResult<PagoSueldo>(data, paginate.offset, cont);

	}

	private static Integer count(GxtGridPaginate paginate) {
		Integer cont = null;
		try {
			cont = (Integer) sqlMap.queryForObject("countPagoSueldo");
		} catch (SQLException e) {
			e.printStackTrace();
		}
		return cont;
	}

	private static Integer count2(GxtGridPaginate paginate) {
		Integer cont = null;
		try {
			cont = (Integer) sqlMap.queryForObject("countPagoSueldoHistorial");
		} catch (SQLException e) {
			e.printStackTrace();
		}
		return cont;
	}

	@SuppressWarnings({ "rawtypes", "unchecked" })
	public static boolean save(PagoSueldo ps) {
		sqlMap = Conexion.getSqlMap();
		boolean respuesta = true;
		try {

			sqlMap.startTransaction();

			Map m = new HashMap(3);
			m.put("contrato_id", ps.getContrato_id());
			m.put("estadopago_id",aux_estadopago_id);
			m.put("fecha", ps.getFecha());

			sqlMap.update("updateTerminoPeriodoPago", m);
			sqlMap.commitTransaction();
			sqlMap.endTransaction();

		} catch (SQLException e) {
			e.printStackTrace();
			respuesta = false;

		}

		return respuesta;
	}

	@SuppressWarnings({ "rawtypes", "unchecked" })
	public static void setHistorialPagos(Date fecha,Integer estadopago_id ) {
		sqlMap = Conexion.getSqlMap();

		try {

			sqlMap.startTransaction();

			Map m = new HashMap(2);
			m.put("fecha", fecha);
			m.put("estadopago_id", estadopago_id);

			sqlMap.update("consultaPagoHistorial", m);
			sqlMap.commitTransaction();
			sqlMap.endTransaction();

		} catch (SQLException e) {
			e.printStackTrace();
			e.printStackTrace();

		}

	}

}
